LiveDisplayX / src / app / display / [token] / page.tsx
page.tsx
Raw
import { cookies } from "next/headers";
import { redirect } from "next/navigation";
import { verifyDisplayJWT } from "@/lib/auth";
import prisma from "@/lib/prisma";

export default async function DisplayAuthPage({
  params,
}: {
  params: { token: string };
}) {
  let display;
  try {
    const claims = await verifyDisplayJWT(params.token);

    display = await prisma.display.findUniqueOrThrow({
      where: {
        authToken: params.token,
        id: claims.displayId,
        organizationId: claims.orgId,
      },
      select: { mode: true },
    });

    const cookieStore = await cookies();
    cookieStore.set("display-token", params.token, {
      httpOnly: true,
      secure: process.env.NODE_ENV === "production",
      sameSite: "strict",
      maxAge: 60 * 60 * 24 * 30,
    });
  } catch (err) {
    redirect("/display/invalid-token");
  }

  redirect(`/display/${display.mode.toLowerCase()}`);
}